Sql server 动态选择语句

Sql server 动态选择语句,sql-server,dynamic,Sql Server,Dynamic,我有下面的INSERT语句(代码1),我需要更改它,因为它将从另一个数据库获取数据,所以需要以(代码2)的形式 可能吗 在系统视图的 INSERT INTO @V_ColumnDefinition (FieldValue)--add primary key constraint to definition table SELECT Char (10) + CASE WHEN A1.NAME IS NOT NULL THEN ' CONS

我有下面的INSERT语句(代码1),我需要更改它,因为它将从另一个数据库获取数据,所以需要以(代码2)的形式 可能吗


系统视图的

INSERT INTO @V_ColumnDefinition
            (FieldValue)--add primary key constraint to definition table
SELECT Char (10)
       + CASE
           WHEN A1.NAME IS NOT NULL THEN ' CONSTRAINT  [' + A1.NAME + ' ] '
           ELSE ''
         END
       + CASE
           WHEN A1.NAME IS NOT NULL
                AND A2.type_desc = 'CLUSTERED'
                AND A1.NAME = A2.NAME THEN 'PRIMARY KEY CLUSTERED'
           ELSE 'PRIMARY KEY NONCLUSTERED'
         END
       + '(' + Char(10) + '['
       + CASE
           WHEN A1.NAME = A3.CONSTRAINT_NAME THEN COLUMN_NAME
         END
       + ' ]' + ')'
FROM   dataname.SYS.OBJECTS A1
       LEFT JOIN dataname.SYS.INDEXES A2
              ON A1.object_id = A2.Object_id
       LEFT JOIN dataname.INFORMATION_SCHEMA.KEY_COLUMN_USAGE A3
              ON A1.NAME = A3.CONSTRAINT_NAME
WHERE  A1.TYPE = 'PK'
       AND parent_object_id = Object_id (@P_TableName) 
如果数据库名称未知,则

DECLARE @sql         VARCHAR(max)='',
        @dataname    SYSNAME = 'databasename',
        @P_TableName SYSNAME = 'tablename'

SET @sql = 'INSERT INTO #V_ColumnDefinition
            (FieldValue)--add primary key constraint to definition table
SELECT Char (10)
       + CASE
           WHEN A1.NAME IS NOT NULL THEN '' CONSTRAINT  ['' + A1.NAME + '' ] ''
           ELSE ''''
         END
       + CASE
           WHEN A1.NAME IS NOT NULL
                AND A2.type_desc = ''CLUSTERED''
                AND A1.NAME = A2.NAME THEN ''PRIMARY KEY CLUSTERED''
           ELSE ''PRIMARY KEY NONCLUSTERED''
         END
       + ''('' + Char(10) + ''[''
       + CASE
           WHEN A1.NAME = A3.CONSTRAINT_NAME THEN COLUMN_NAME
         END
       + '' ]'' + '')''
FROM   ' + Quotename(@dataname)
           + '.SYS.OBJECTS A1
       LEFT JOIN ' + Quotename(@dataname)
           + '.SYS.INDEXES A2
              ON A1.object_id = A2.Object_id
       LEFT JOIN ' + Quotename(@dataname)
           + '.INFORMATION_SCHEMA.KEY_COLUMN_USAGE A3
              ON A1.NAME = A3.CONSTRAINT_NAME
WHERE  A1.TYPE = ''PK''
       AND parent_object_id = Object_id ('''
           + @P_TableName + ''') 
'

PRINT @sql

EXEC(@sql) 

将变量temp table更改为#temp table以访问动态查询内部。如果您想使用variable temp table,下面的注释将更新我的答案。

您能告诉我如何在variable table@prdp中使用它吗
DECLARE @sql         VARCHAR(max)='',
        @dataname    SYSNAME = 'databasename',
        @P_TableName SYSNAME = 'tablename'

SET @sql = 'INSERT INTO #V_ColumnDefinition
            (FieldValue)--add primary key constraint to definition table
SELECT Char (10)
       + CASE
           WHEN A1.NAME IS NOT NULL THEN '' CONSTRAINT  ['' + A1.NAME + '' ] ''
           ELSE ''''
         END
       + CASE
           WHEN A1.NAME IS NOT NULL
                AND A2.type_desc = ''CLUSTERED''
                AND A1.NAME = A2.NAME THEN ''PRIMARY KEY CLUSTERED''
           ELSE ''PRIMARY KEY NONCLUSTERED''
         END
       + ''('' + Char(10) + ''[''
       + CASE
           WHEN A1.NAME = A3.CONSTRAINT_NAME THEN COLUMN_NAME
         END
       + '' ]'' + '')''
FROM   ' + Quotename(@dataname)
           + '.SYS.OBJECTS A1
       LEFT JOIN ' + Quotename(@dataname)
           + '.SYS.INDEXES A2
              ON A1.object_id = A2.Object_id
       LEFT JOIN ' + Quotename(@dataname)
           + '.INFORMATION_SCHEMA.KEY_COLUMN_USAGE A3
              ON A1.NAME = A3.CONSTRAINT_NAME
WHERE  A1.TYPE = ''PK''
       AND parent_object_id = Object_id ('''
           + @P_TableName + ''') 
'

PRINT @sql

EXEC(@sql)