Sql server 动态选择语句
我有下面的INSERT语句(代码1),我需要更改它,因为它将从另一个数据库获取数据,所以需要以(代码2)的形式 可能吗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 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)